package cn.iocoder.yudao.module.ym.service.site;

import java.util.*;

import cn.hutool.core.lang.Pair;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.ym.dal.dataobject.connection.ConnectionDO;
import jakarta.validation.*;
import cn.iocoder.yudao.module.ym.controller.admin.site.vo.*;
import cn.iocoder.yudao.module.ym.dal.dataobject.site.SiteDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 电站 Service 接口
 *
 * @author 韩艳阳
 */
public interface SiteService {


    String getNames(String ids);

    String getNames(List<Long> siteIds);


    SiteDO getIdByName(String name);

    /**
     * 创建电站
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSite(@Valid SiteSaveReqVO createReqVO);

    /**
     * 更新电站
     *
     * @param updateReqVO 更新信息
     */
    void updateSite(@Valid SiteSaveReqVO updateReqVO);

    /**
     * 删除电站
     *
     * @param id 编号
     */
    void deleteSite(Long id);

    /**
     * 获得电站
     *
     * @param id 编号
     * @return 电站
     */
    SiteRespVO getSite(Long id);

    /**
     * 获得电站分页
     *
     * @param pageReqVO 分页查询
     * @return 电站分页
     */
    PageResult<SiteRespVO> getSitePage(SitePageReqVO pageReqVO);

    List<SiteRespVO> getSiteListAll(SitePageReqVO pageReqVO);

    List<SiteRespVO> getSiteList(SitePageReqVO pageReqVO);


    List<SimpleSiteRespVO> getSimpleSiteList(SitePageReqVO pageReqVO);

    List<SiteRespVO> getSiteByAreaId(Long areaId,Long userId);


    UserImportRespVO importSite(List<SiteImportVO> siteImportVOList, Boolean isUpdateSupport);

    /**
     * 刷新区域分布
     */
    Pair<List<SiteBindingVO>, List<ConnectionDO>> planningArea();

    void confirmPlanningArea(List<SiteBindingVO> siteBindingVOList, List<ConnectionDO> connectionDOList);

    //获取在屏幕内的站点信息
    List<SimpleSiteRespVO> siteInScreen(String area);

    /**
     *   获取当前电站下对应角色的所有人
     * @param siteId
     * @return
     */
    List<AdminUserDO> getSiteRoleUser(List<Long> siteId,Integer type);



    Map<Object,Object> growthGate(SitePageReqVO pageReqVO1);
}
